package com.zff.rental.common;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.data.jpa.domain.Specification;

/**
 * 分页入参
 *
 * @author HCY
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class DelFlagParams extends PageSortParams {
    /**
     * 删除标志 默认、0：未删除 1：已删除、2：全部
     */
    protected Integer delFlag;

    /**
     * 数据库删除标志 0：未删除 1：已删除 时
     * 配合SpecBuilder.equal("delFlag", params.getDbDelFlag())使用可筛选对应的数据
     */
    public Integer getDbDelFlag() {
        if (delFlag != null && delFlag == 2) {
            return null;
        }
        if (delFlag != null && delFlag == 1) {
            return 1;
        }
        return 0;
    }

    /**
     * 数据库删除标志 0：未删除 等于Id是已删除时
     * 配合SpecBuilder.add(params.isIgnore(), params.toSpecification())使用可筛选对应的数据
     */
    public <T> Specification<T> toSpecification() {
        if (delFlag != null && delFlag == 2) {
            return null;
        }
        if (delFlag != null && delFlag == 1) {
            return (root, query, criteriaBuilder) -> criteriaBuilder.equal(root.get("del"), root.get("id"));
        }
        return (root, query, criteriaBuilder) -> criteriaBuilder.notEqual(root.get("del"), root.get("id"));
    }

    public boolean isIgnore() {
        return delFlag != null && delFlag == 2;
    }
}
